package com.itany.corejava.code10_io.随机读写流;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

/**
 * @author MissChen
 * @date 2024年03月11日 16:39
 */
public class Test {
    public static void main(String[] args) {
        // RandomAccessFile(参数1,参数2)
        // 参数1：文件对象或者字符串
        // 参数2：读写模式，其值有4种，常用值:r（只读）、rw(读写)
        try (
                RandomAccessFile raf = new RandomAccessFile("corejava/src/random.txt", "rw");

        ) {

            //此文件开头的偏移量(以字节为单位)，在该位置发生下一个读取或者写入操作
            System.out.println("指针所在的索引位置："+raf.getFilePointer());
            System.out.println((char)raf.read());
            // 只有模式为rw才能写，不然会报错
            // 中文根据编码不同，GBK占2个字节，UTF-8占3个字节
            // 执行写入操作时，根据当前指针所在的位置开始写入内容
            // 会将已有的内容覆盖掉，覆盖的内容长度即位所写入内容的字节数
            System.out.println("指针所在的索引位置："+raf.getFilePointer());
            raf.write("你好".getBytes());
            System.out.println("指针所在的索引位置："+raf.getFilePointer());
            raf.write("hello".getBytes());


            //可以手动移动指针的偏移量
            raf.seek(7);
            raf.write("rr".getBytes());
            System.out.println("指针所在的索引位置："+raf.getFilePointer());//9


            // 设置指针跳过指定的字节
            raf.skipBytes(5);
            raf.write("9999".getBytes());
            System.out.println("指针所在的索引位置："+raf.getFilePointer());

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
